package com.suxin.ratelimit.v2;

import java.lang.annotation.*;
import java.time.temporal.ChronoUnit;

/**
 * @author Tang
 * @classname RateLimit
 * @description [  ]
 * @date 2022/2/9 15:59
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface RateLimit {

    /**
     * 允许通过的个数
     *
     * @return
     */
    int limit() default 5;

    /**
     * 单位时间，默认是1秒
     *
     * @return
     */
    int duration() default 1;

    /**
     * 时间单位
     *
     * @return
     */
    ChronoUnit unit() default ChronoUnit.SECONDS;

    /**
     * 限流类型
     *
     * @return
     */
    TYPE type() default TYPE.URL;

    enum TYPE {
        /**
         * url限流
         */
        URL,

        /**
         * IP 限流
         */
        IP
    }

}
